package HashTable;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;

/*      给定两个数组 nums1 和 nums2 ，返回它们的交集
        。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。

        示例 1：
        输入：nums1 = [1,2,2,1], nums2 = [2,2]
        输出：[2]

        示例 2：
        输入：nums1 = [4,9,5], nums2 = [9,4,9,8,4]
        输出：[9,4]
        解释：[4,9] 也是可通过的
        1 <= nums1.length, nums2.length <= 1000
        0 <= nums1[i], nums2[i] <= 1000
        */
public class lc349 {
    public static void main(String[] args) {

    }
    public static int[] intersection(int[] nums1, int[] nums2) {
     ///数字的取值范围为1000，若建立数组为hash表，则会带来很大的内存浪费
        HashSet<Integer> setNum1 = new HashSet<>();
        HashSet<Integer> setNum2 = new HashSet<>();

        // 将数组元素添加到对应的集合中
        for (int val : nums1) {
            setNum1.add(val);
        }

        for (int val : nums2) {
            setNum2.add(val);
        }

        List<Integer> resultList = new ArrayList<>();

        // 遍历第一个集合，如果第二个集合也包含该元素，则将其添加到结果列表中
        for (int val : setNum1) {
            if (setNum2.contains(val)) {
                resultList.add(val);
            }
        }

        // 将结果列表转换为整数数组
        int[] result = new int[resultList.size()];
        for (int i = 0; i < resultList.size(); i++) {
            result[i] = resultList.get(i);
        }

        return result;

    }
}
